package com.xbongbong.pro.bi.commons.pojo.vo;

import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.bi.commons.pojo.AggFieldPojo;
import com.xbongbong.pro.statistic.result.pojo.FieldAttrPojo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.List;
import java.util.Map;

/**
 * 分组合聚合VO
 * @ClassName GroupSqlVO
 * @Author 梁鲁江
 * 创建时间 2021/11/5 14:39
 * 修改时间  2021/11/5 14:39
 **/
@Setter
@Getter
@ToString
public class GroupSqlVO extends BaseVO {
    /**
     * 分组字段
     */
    List<String> groupFieldsList ;
    List<String> rowGroupFieldsList ;
    List<String> colGroupFieldsList ;
    /**
     * 分组字段放在Columns的位置返回
     */
    List<String> groupColumnsList ;
    List<String> rowGroupColumnsList ;
    List<String> colGroupColumnsList ;
    /**
     * 汇总字段和原始字段的对应关系
     */
    Map<String, AggFieldPojo> aggFieldMap ;
    /**
     * 汇总字段
     */
    List<String> aggFieldsList ;
    /**
     * 总计字段（目前只有统计表用）
     */
    List<String> sumTotalFieldsList;
    /**
     * 保存分组字段为下拉单选时的字段sql
     */
    Map<String, FieldAttrPojo> comboFieldMap;
    /**
     * 子查询外层含有count函数的计算字段SQL数组（只存使用count函数的计算字段，存在count公式时使用）
     */
    List<String> subQuerySqlOfCountList;
    /**
     * 子查询外层column SQL数组（全部column，包含分组字段，存在count公式时使用）
     */
    String subSqlOfCount;
    /**
     * 子查询内层完整SQL（存在count公式时使用）
     */
    String subCompleteSqlOfCount;
    /**
     * 子查询外层计算字段排序SQL容器（存在count公式时使用）
     */
    String subOrderSqlOfCount;
    /**
     * 普通汇总字段+非count函数计算字段（存在count公式时使用）
     */
    List<String> summaryColumnAlisa;

    public static GroupSqlVO  initGroupSqlVO(List<String> rowGroupFieldsList,
                                             List<String> colGroupFieldsList,
                                             List<String> rowGroupColumnsList,
                                             List<String> colGroupColumnsList,
                                             List<String> sumTotalFieldsList,
                                             Map<String, AggFieldPojo> aggFieldMap,
                                             Map<String, FieldAttrPojo> comboFieldMap,
                                             List<String> groupFieldsList){
        GroupSqlVO groupSqlVO = new GroupSqlVO();
        groupSqlVO.setRowGroupFieldsList(rowGroupFieldsList);
        groupSqlVO.setColGroupFieldsList(colGroupFieldsList);

        groupSqlVO.setRowGroupColumnsList(rowGroupColumnsList);
        groupSqlVO.setColGroupColumnsList(colGroupColumnsList);

        groupSqlVO.setSumTotalFieldsList(sumTotalFieldsList);
        groupSqlVO.setAggFieldMap(aggFieldMap);
        groupSqlVO.setComboFieldMap(comboFieldMap);
        groupSqlVO.setGroupFieldsList(groupFieldsList);
        return groupSqlVO;
    }

    public static GroupSqlVO initGroupSqlVO(Map<String, FieldAttrPojo> comboFieldMap, List<String> groupFieldsList){
        GroupSqlVO groupSqlVO = new GroupSqlVO();
        groupSqlVO.setGroupFieldsList(groupFieldsList);
        groupSqlVO.setComboFieldMap(comboFieldMap);
        return groupSqlVO;
    }
}
